package model

import "fmt"

type ExprType int

const (
	ExprTypeZero ExprType = iota
	// 值类型
	ExprTypeNull      ExprType = iota // null 值
	ExprTypeInt64     ExprType = iota
	ExprTypeFloat     ExprType = iota
	ExprTypeStr       ExprType = iota // 字符串
	ExprTypeBool      ExprType = iota // 布尔值
	ExprTypeValueList ExprType = iota // 列表类型 eg: ('name', 1)

	// 标识符
	ExprTypeNameId     ExprType = iota // ID标识
	ExprTypeNameIdList ExprType = iota // ID标识列表
	ExprTypeStar       ExprType = iota // 星号 *

	// 操作符
	ExprTypeAnd      ExprType = iota
	ExprTypeOr       ExprType = iota
	ExprTypeCmpEq    ExprType = iota // =
	ExprTypeCmpNotEq ExprType = iota // !=
	ExprTypeCmpGt    ExprType = iota // >
	ExprTypeCmpGtEq  ExprType = iota // >=
	ExprTypeCmpLt    ExprType = iota // <
	ExprTypeCmpLtEq  ExprType = iota // <=
	ExprTypeComma    ExprType = iota // 逗号
)

const (
	MinValueType = ExprTypeNull
	MaxValueType = ExprTypeValueList
)

func (t ExprType) String() string {
	return fmt.Sprintf("ExprType(%v)", int(t))
}

const (
	TableRowIdName = "id"
)
